Tigerインタプリタで -1 や -x を扱えるようにしたい
code:diff
diff --git a/lib/parser.mly b/lib/parser.mly
index 32f4a41..5405e28 100644
--- a/lib/parser.mly
+++ b/lib/parser.mly
@@ -53,6 +53,7 @@ exp:
| exp LE exp { Syntax.OpExp { left = $1; op = Syntax.LeOp; right = $3} }
| exp GT exp { Syntax.OpExp { left = $1; op = Syntax.GtOp; right = $3} }
| exp GE exp { Syntax.OpExp { left = $1; op = Syntax.GeOp; right = $3} }
+| MINUS exp { Syntax.OpExp { left = Syntax.IntExp(0); op = Syntax.MinusOp; right = $2} }
| LET decs IN exp END { Syntax.LetExp { decs = $2; body = $4 } }
| ID LPAREN args RPAREN { Syntax.CallExp { id = $1; args = $3 } }
| IF exp THEN exp { Syntax.IfExp { test = $2; then' = $4; else' = None } }
diff --git a/test/tiger_test.expected b/test/tiger_test.expected
index f44e0a3..46a52c8 100644
--- a/test/tiger_test.expected
+++ b/test/tiger_test.expected
@@ -30,3 +30,4 @@ result: 4649
Hello World!!
Goodbye World!!
result: 55
+result: -30
diff --git a/test/tiger_test.ml b/test/tiger_test.ml
index 2a32255..a09b543 100644
--- a/test/tiger_test.ml
+++ b/test/tiger_test.ml
@@ -301,3 +301,15 @@ let () =
in print_string "result: ";
Tiger.Eval.print_val (eval src);
print_newline ()
+
+(* 負の整数リテラル *)
+let () =
+ let src = {|
+ let var a := -10
+ in -10 + -a
+ end
+ |}
+ in
+ print_string "result: ";
+ Tiger.Eval.print_val (eval src);
+ print_newline ()